Javascript toFixed 不舍入
全部标签 float的两种不同舍入方式显示出不同的结果。"%.2f"%0.015#=>"0.01"0.015.round(2)#=>0.02一个是字符串,另一个是float。当四舍五入除0.5以外的任何值时,它都会正确地四舍五入,或者说与四舍五入函数的方式相同。"%.2f"%0.01500000000000001#=>"0.02"此外,它并不总是这样:[0.005,0.015,0.025,0.035,0.045,0.055,0.065,0.075,0.085,0.095].map{|x|"%.2f"%x}#=>["0.01","0.01","0.03","0.04","0.04","0.06",
例如,如果我有24987654,我需要它返回24000000,这可能吗? 最佳答案 这是一个朴素的算法:n=24987654n/(10**(n.to_s.size-2))*(10**(n.to_s.size-2)=>24000000 关于ruby-在Ruby中,你如何将数字向下舍入到2位有效数字,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/15535543/
我正在尝试解决与个人项目相关的任务的边缘案例。确定一个服务的单价,由total_amount和cost组成。示例包括:#1unit_price=300/1000#=0.3#2unit_price=600/800#=0.75#3unit_price=500/1600#=0.3125对于1和2,unit_prices可以保持不变。对于3,四舍五入到小数点后两位就足够了,例如(500/1600).round(2)当float变长时出现问题:#4unit_price=400/56000#=0.007142857142857143很明显,float相当长。在这种情况下,目标是四舍五入到第一个有效
我的简单RubyMotion代码:data=DataParser.parse(url)error_ptr=Pointer.new(:object)json=NSJSONSerialization.JSONObjectWithData(data,options:0,error:error_ptr)该url是一个天气API,它提供一个带有温度的JSON作为float,如{"temp_c":22.4,...}。奇怪的是,float22.4被转换为22.3999938964844。如果我检查data.to_s,温度读数为22.4,所以我假设错误在NSJSONSerialization.JSON
这当然是坏的:(0.1+0.1+0.1)=>0.30000000000000004(0.1+0.1+0.1)==0.3#false我不需要完美的总和,只要足以说明两个float具有相同的值即可。我能想到的最好办法是将等式两边相乘并四舍五入。这是最好的方法吗?((0.1+0.1+0.1)*1000).round==(0.3*1000).round更新:我卡在了Rubyv1.8.7上。 最佳答案 准确求和和有效比较是有区别的。你说你想要前者,但看起来你想要后者。底层的Rubyfloat算法是IEEE的,并且具有最小化累积误差的合理语义,
我在Ruby中玩一些浮点舍入错误的玩具示例,我注意到以下行为让我感到惊讶。首先,一个不足为奇的例子,发生舍入错误的地方:numbers=Array.new(10,0.1)#=>[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]numbers.inject(0,:+)#=>0.9999999999999999现在尝试用Enumerable#sum做同样的事情:numbers.sum#=>1.0我在文档中唯一能找到的暗示解释的是summethodmaynotrespectmethodredefinitionof“+”methodssuchasInteger#
Ruby2.4使用高斯舍入法对float进行舍入。根据维基百科:Atie-breakingrulethatislessbiased(evenwhentheoriginalnumbersarepositiveornegativewithunequalprobability)isroundhalftoeven.Bythisconvention,ifthefractionofyis0.5,thenqistheevenintegernearesttoy.Thus,forexample,+23.5becomes+24,asdoes+24.5;while−23.5becomes−24,asdoes
有没有可以像下面这样舍入的内置函数?10->1012->1013->1514->1516->1518->20 最佳答案 我不知道Python中的标准函数,但这对我有用:Python3defmyround(x,base=5):returnbase*round(x/base)很容易看出为什么上述方法有效。您要确保您的数字除以5是一个整数,并正确四舍五入。所以,我们首先这样做(round(x/5)),然后因为我们除以5,所以我们也乘以5。我通过给它一个base参数使函数更通用,默认为5。Python2在Python2中,需要float(x
有没有可以像下面这样舍入的内置函数?10->1012->1013->1514->1516->1518->20 最佳答案 我不知道Python中的标准函数,但这对我有用:Python3defmyround(x,base=5):returnbase*round(x/base)很容易看出为什么上述方法有效。您要确保您的数字除以5是一个整数,并正确四舍五入。所以,我们首先这样做(round(x/5)),然后因为我们除以5,所以我们也乘以5。我通过给它一个base参数使函数更通用,默认为5。Python2在Python2中,需要float(x
我正在尝试将BigDecimal值向上舍入到小数点后两位。我正在使用BigDecimalrounded=value.round(newMathContext(2,RoundingMode.CEILING));logger.trace("rounded{}to{}",value,rounded);但它并没有始终如一地做我想要的:rounded0.819to0.82rounded1.092to1.1rounded1.365to1.4//shouldbe1.37rounded2.730to2.8//shouldbe2.74rounded0.819to0.82我不关心有效数字,我只想要两位小数